ORIENTASI FULL-STACK & DEVELOPER ECOSYSTEM
Tailwind CSS
Advanced UI
Tekan β atau klik tombol untuk mulai
πΊοΈ Roadmap BAB 3
Perjalanan dari konsep dasar hingga membangun Admin Dashboard.
Layout Core
Flexbox & Grid
Komponen
Card, Sidebar, Navbar, Modal
UX Pattern
Form, Loading, Empty State
Mini Project
Admin Dashboard UI
π― Capaian Pembelajaran
- β Memahami Flexbox & Grid secara visual
- β Membuat komponen UI dengan state interaktif
- β Menyusun arsitektur layout dashboard
- β Membangun Admin Dashboard UI profesional
π Flexbox Fundamentals
Sistem tata letak 1 dimensi β menyusun elemen dalam satu garis: baris (mendatar) ATAU kolom (menurun).
π§ Analogi Sederhana
Bayangkan kamu menata buku berdiri di atas rak. Semua buku berbaris dalam satu garis. Kamu bisa atur: apakah buku didorong ke kiri, ke tengah, ke kanan, atau diberi jarak merata. Kamu juga bisa atur apakah buku rata bagian atas atau bawahnya. Itulah Flexbox β kamu mengatur sekumpulan elemen yang berbaris dalam satu garis.
π Konsep Inti: Dua Sumbu (Axis)
Flexbox bekerja dengan 2 arah. Memahami ini = kunci agar tidak bingung:
Arah utama elemen berbaris. Diatur oleh justify-content. Default = mendatar (kiriβkanan).
Arah tegak lurus dari sumbu utama. Diatur oleh items-*. Default = vertikal (atasβbawah).
π¬ Live demo β klik tombol, perhatikan posisi kotak berubah di sumbu utama:
<!-- "flex" mengubah div jadi flex container --> <div class="flex justify-center items-center gap-3"> <div class="w-12 h-12 bg-indigo-500"></div> <div class="w-12 h-12 bg-cyan-400"></div> </div>
π§ Bedah Class Penting (apa fungsinya satu per satu)
| Class Tailwind | Fungsi |
|---|---|
flex | Mengaktifkan Flexbox pada elemen (jadi "flex container") |
flex-row / flex-col | Arah berbaris: mendatar (default) atau menurun |
justify-start/center/between | Atur posisi di sumbu utama (kiri β kanan) |
items-start/center/end | Atur posisi di sumbu silang (atas β bawah) |
gap-3 | Jarak antar elemen (lebih rapi daripada margin) |
flex-1 | Membuat elemen melebar mengisi sisa ruang kosong |
flex-wrap | Elemen turun ke baris baru jika ruang habis (anti berdesakan) |
β Kapan Dipakai
- Navbar (logo kiri, menu kanan)
- Toolbar & deretan tombol
- Menengahkan elemen (center)
- Daftar item horizontal
β οΈ Kesalahan Umum
- Lupa
flexβjustify-*tidak berefek - Tertukar
justifyvsitems - Pakai
marginmanual padahal adagap
π Best Practice
- Gunakan
gap, bukan margin - Pakai Flexbox untuk layout 1 arah saja
- Butuh 2 arah? β pakai Grid (slide berikutnya)
π² CSS Grid & Perbandingannya
Sistem tata letak 2 dimensi β mengatur baris DAN kolom secara bersamaan. Cocok untuk struktur halaman penuh.
π§ Analogi Sederhana
Kalau Flexbox seperti menata buku dalam satu baris, maka Grid seperti papan catur atau kotak-kotak di buku tulis matematika. Kamu menentukan dulu: "saya mau 3 kolom dan 2 baris", lalu menaruh elemen ke dalam kotak-kotak itu. Satu elemen bahkan bisa menempati 2 kotak sekaligus (merge). Grid memikirkan layout dulu, baru kontennya.
π Konsep Inti Grid
Kamu tentukan jumlah kolom (grid-cols-3) dan baris. Grid otomatis membuat "sel".
Satu elemen bisa membentang beberapa kolom (col-span-2) atau baris (row-span-2).
Jarak antar sel diatur rapi sekaligus dengan gap-4.
π¬ Visual grid-cols-3 β perhatikan kotak pertama membentang 2 kolom:
<!-- grid + grid-cols-3 = 3 kolom sama lebar --> <div class="grid grid-cols-3 gap-2"> <!-- col-span-2 = lebar 2 kolom --> <div class="col-span-2">header</div> <div>sidebar</div> </div>
π§ Bedah Class Penting
| Class | Fungsi |
|---|---|
grid | Mengaktifkan CSS Grid pada elemen |
grid-cols-3 | Membuat 3 kolom dengan lebar sama |
col-span-2 | Elemen membentang selebar 2 kolom |
row-span-2 | Elemen membentang setinggi 2 baris |
gap-4 | Jarak antar sel grid |
md:grid-cols-3 | 3 kolom HANYA di layar sedang ke atas (responsif) |
βοΈ Flexbox vs Grid β Kapan Pakai yang Mana?
| Aspek | Flexbox | Grid |
|---|---|---|
| Dimensi | 1 arah (baris / kolom) | 2 arah (baris & kolom) |
| Cara berpikir | Konten dulu | Layout dulu |
| Contoh ideal | Navbar, list, tombol | Halaman penuh, dashboard, galeri |
| Aturan praktis | 1 baris/kolom β Flexbox. Struktur kotak-kotak β Grid. Sering dipakai bareng! | |
π Card Design Patterns
Card (kartu) = wadah persegi untuk mengelompokkan informasi yang saling berkaitan agar mudah dibaca.
π§ Analogi & Konsep "State"
Card itu seperti kartu nama atau kartu menu makanan β satu kotak berisi gambar, judul, deskripsi, dan tombol. Di web modern, satu card bisa punya beberapa "state" (kondisi tampilan) tergantung interaksi pengguna:
π¬ Arahkan kursor ke kartu tengah β efek 3D flip:
Default State
Padding, sudut membulat (rounded), bayangan (shadow). Tenang, belum ada interaksi.
Hover Me
flip 3D
rotateY(180deg)
backface-visibility: hidden
Active / Glow
State aktif: ring + shadow glow menandakan kartu terpilih.
π§ Anatomi Card & Class-nya
| Class | Fungsi |
|---|---|
rounded-2xl | Sudut membulat |
p-6 | Jarak isi ke tepi (padding) |
shadow-xl | Bayangan, kesan "mengambang" |
hover:scale-105 | Membesar 5% saat hover |
transition | Membuat perubahan halus, bukan patah |
π‘ Rahasia efek 3D flip:
perspectiveβ memberi "kedalaman" ruang 3DrotateY(180deg)β memutar kartu seperti membalik koinbackface-visibility:hiddenβ menyembunyikan sisi belakang agar tidak tembus
<!-- Card lengkap dengan hover effect --> <div class="rounded-2xl bg-gray-900 p-6 shadow-xl hover:scale-105 transition"> <h3 class="font-bold text-lg">Judul Kartu</h3> <p class="text-gray-400 text-sm">Deskripsi singkat...</p> </div>
ποΈ Dashboard Layout Architecture
Dashboard = halaman kontrol tempat admin melihat & mengelola data. Hampir semua dashboard memakai pola layout yang sama.
π§ Analogi: Ruang Kerja Kantor
Bayangkan sebuah kantor. Ada papan menu di dinding kiri (Sidebar) untuk pindah ruangan, ada papan info di atas pintu (Navbar) berisi nama & notifikasi, dan meja kerja utama di tengah (Content) tempat semua pekerjaan terjadi. Pola 3 bagian ini muncul di hampir semua aplikasi: Gmail, YouTube Studio, Spotify, dashboard admin β semua mirip!
navigasi menu
(Stat Cards, Charts, Tables)
Menu navigasi tetap di kiri. Untuk pindah antar halaman (Dashboard, Users, Settings).
Bar atas. Berisi pencarian, profil pengguna, notifikasi. Biasanya sticky (menempel saat scroll).
Area terbesar. Tempat data ditampilkan β bagian yang paling sering berubah.
π§ Cara Membangunnya dengan Grid
<!-- grid-cols: kolom 170px (sidebar) + sisanya (1fr) --> <div class="grid grid-cols-[170px_1fr] grid-rows-[56px_1fr] h-screen"> <aside class="row-span-2">Sidebar</aside> <header>Navbar</header> <main>Content</main> </div>
Penjelasan: [170px_1fr] artinya kolom pertama selebar 170px (sidebar), kolom kedua mengisi sisa ruang (1fr = 1 fraction). row-span-2 membuat sidebar memanjang dari atas sampai bawah. h-screen = tinggi penuh layar.
π Sidebar Collapsible
Sidebar = panel menu navigasi di sisi kiri. Collapsible = bisa dikecilkan agar konten utama lebih luas.
π§ Kenapa Harus Bisa Collapse?
Bayangkan laci dapur: saat dibutuhkan kamu buka lebar (lihat semua isinya), saat tidak kamu tutup agar tidak makan tempat. Sidebar juga begitu β di layar lebar tampil penuh dengan teks menu, tapi saat butuh fokus ke konten (atau di layar kecil) bisa dikecilkan jadi hanya ikon. Ini pola standar di Gmail, VS Code, Notion.
π¬ Klik tombol untuk collapse / expand:
<!-- lebar berubah lewat JavaScript --> <nav class="transition-all duration-500" id="sidebar"> <span>π <span class="label">Dashboard</span></span> </nav> // JS: saat diklik, ubah lebar + sembunyikan label function toggle() { sidebar.style.width = collapsed ? '160px' : '52px'; }
π Kunci Teknik
transition-all duration-500bikin gerakan halus- Saat collapse, sembunyikan teks, sisakan ikon
β Tips UX
- Ikon harus tetap jelas tanpa teks
- Beri tooltip saat hover ikon (opsional)
β οΈ Hindari
- Jangan hilangkan sidebar total (user bingung)
- Jangan lupa
overflow-hiddensaat menyempit
π§ Navbar + Dropdown
Navbar (navigation bar) = bar di bagian atas halaman berisi brand, menu, dan aksi pengguna.
π§ Analogi: Papan Nama Toko
Navbar itu seperti bagian depan toko: ada logo/nama toko di kiri, dan petunjuk arah di kanan (kasir, toilet, keluar). Pola umum: brand di kiri, menu & profil di kanan β dipisah dengan justify-between. Dropdown adalah menu yang muncul saat diklik, untuk menghemat ruang (menyembunyikan opsi Profile/Logout sampai dibutuhkan).
π¬ Klik "Menu βΎ" untuk membuka dropdown:
π§ Class Kunci Navbar
flex | Menyusun isi navbar sebaris |
justify-between | Brand mentok kiri, menu mentok kanan |
items-center | Semua sejajar di tengah vertikal |
sticky top-0 | Navbar menempel di atas saat scroll |
hidden sm:inline | Sembunyikan menu di HP, tampil di layar besar |
<header class="flex items-center justify-between p-3 bg-gray-900 sticky top-0"> <div>π£ Brand</div> <nav class="flex gap-4"> <a>Home</a> <a>About</a> </nav> </header>
opacity:0 + pointer-events:none. Saat tombol diklik, JavaScript mengubahnya jadi opacity:1 + scale(1) sehingga muncul dengan animasi mengembang. Posisinya pakai absolute agar mengambang di atas konten lain.
πͺ Modal / Overlay
Modal = kotak dialog yang muncul di atas seluruh halaman untuk meminta perhatian penuh pengguna.
π§ Analogi & Kapan Dipakai
Modal seperti petugas yang menghampiri dan berkata "tunggu sebentar, konfirmasi dulu" sebelum kamu lanjut. Latar belakang diredupkan (overlay/backdrop) supaya fokus tertuju ke dialog. Dipakai untuk:
<!-- 1. Overlay menutupi seluruh layar --> <div class="fixed inset-0 bg-black/60 grid place-items-center z-50"> <!-- 2. Kotak dialog di tengah --> <div class="bg-gray-900 rounded-2xl p-6"> Isi modal... </div> </div>
π§ Bedah Konsep
fixed inset-0β menutup seluruh layar (overlay)bg-black/60β latar gelap transparan 60%grid place-items-centerβ kotak otomatis di tengahz-50β tampil paling depan- Animasi: dari
translateY(40px) opacity:0β naik & muncul
π Best practice: klik area gelap atau tombol "Tutup" harus bisa menutup modal.
π Form Design & Validation
Form = tempat pengguna mengisi data (login, daftar, dll). Validation = pengecekan apakah isian sudah benar.
π§ Kenapa Validasi & Feedback Penting?
Bayangkan mengisi formulir kertas, lalu baru tahu salah setelah diserahkan β menyebalkan, kan? Form web yang baik memberi feedback langsung: border berubah hijau jika benar, merah jika salah, plus pesan jelas. Ini membuat form terasa hidup dan accessible (mudah dipakai semua orang).
π¬ Ketik email lalu klik Cek β perhatikan perubahan border & pesan:
Masukkan email yang valid.
<input class="border border-white/15 focus:ring-2 focus:ring-cyan-400 focus:border-cyan-400 transition" /> // State berdasarkan hasil validasi: // valid -> border-emerald-500 // error -> border-red-500 + pesan
π§ State Penting Input
focus:saat diklik/aktifring= cincin highlight- warna border = penanda valid/error
β Form yang Baik
- Selalu ada
<label> - Placeholder sebagai contoh
- Pesan error spesifik & ramah
β οΈ Hindari
- Error hanya warna (buta warna!)
- Pesan samar "input salah"
- Tanpa indikasi field wajib
β³ Loading State & Skeleton
Loading state = tampilan saat data sedang dimuat dari server. Tujuannya: pengguna tahu aplikasi bekerja, bukan macet.
π§ Analogi: Menunggu Pesanan
Saat pesan makanan, pelayan bilang "ditunggu ya, sedang dimasak". Tanpa itu, kamu bingung apakah pesananmu diterima. Layar kosong tanpa loading = pengguna mengira aplikasi error/hang. Ada 3 gaya umum, masing-masing untuk situasi berbeda π
β Skeleton
Kerangka abu-abu meniru bentuk konten asli. Terbaik β terasa cepat.
β‘ Spinner
Lingkaran berputar. Untuk loading singkat / tombol.
β’ Progress Bar
Menunjukkan progres (70%). Untuk upload / proses panjang.
π§ Cara Buat Skeleton (cara termudah)
<!-- animate-pulse = efek berkedip pelan bawaan Tailwind --> <div class="animate-pulse bg-gray-700 h-24 rounded-lg"></div> <div class="animate-pulse bg-gray-700 h-3 w-3/4 rounded mt-3"></div>
π Aturan praktis: loading < 1 detik β spinner. Memuat kartu/daftar β skeleton. Upload file β progress bar.
π Empty State Design
Empty state = tampilan saat belum ada data (daftar kosong, hasil pencarian nihil, inbox bersih).
π§ Kenapa Tidak Boleh Dibiarkan Kosong?
Layar kosong polos membuat pengguna bingung: "Apakah error? Apa yang harus saya lakukan?" Empty state yang baik mengubah kebingungan jadi arahan. Rumusnya: Ilustrasi ramah + pesan jelas + tombol aksi (CTA) yang memberi tahu langkah berikutnya.
Belum ada data ποΈ
Mulai dengan menambahkan item pertamamu.
π§ 3 Bahan Wajib Empty State
SVG atau emoji yang ramah, tidak menakutkan. Hindari ikon error merah.
Jelaskan kondisi + nada positif. "Belum ada data" lebih baik daripada "Kosong".
Tombol yang memberi langkah jelas: "+ Tambah Data", "Mulai Sekarang".
β οΈ Hindari: layar putih polos tanpa petunjuk apa pun.
π Dashboard Analytics UI
Analytics UI = bagian dashboard yang menampilkan angka & grafik agar data mudah dipahami sekilas.
π§ Kenapa Pakai Grafik, Bukan Tabel Angka?
Otak manusia membaca bentuk visual jauh lebih cepat daripada deretan angka. "Penjualan naik" lebih instan terlihat dari batang grafik yang meninggi daripada membaca tabel. Dua elemen utama: Stat Card (satu angka penting + label) dan Chart (perbandingan/tren). Hebatnya, grafik sederhana bisa dibuat tanpa library β cukup CSS!
π¬ Stat cards di bawah β angkanya menghitung naik otomatis (counter animation):
Users
0
Revenue
0
Orders
0
Visits
0
π Penjualan / Bulan (bar chart tumbuh saat slide muncul)
π§ Rahasia Bar Chart Tanpa Library
<!-- Tiap batang hanyalah div dengan tinggi (height) berbeda --> <div class="flex items-end gap-3 h-40"> <div class="flex-1 bg-cyan-400" style="height:60%"></div> <div class="flex-1 bg-cyan-400" style="height:90%"></div> </div>
Kuncinya: items-end membuat batang tumbuh dari bawah, flex-1 membagi lebar rata, dan tinggi (height:%) merepresentasikan nilai data. Animasi naik dibuat dengan transition pada height. Counter angka dibuat dengan sedikit JavaScript (menambah nilai bertahap).
π§© Mini Project Overview
Semua komponen yang dipelajari digabung menjadi satu Admin Dashboard UI.
Sidebar
Navigasi collapsible
Navbar
Search + profil dropdown
Stat Cards
4 metrik utama
Chart
Bar chart CSS
Data Table
Daftar transaksi
Cards
Hover effect
π Demo: Admin Dashboard UI
Users
1.2K
Sales
$8.9K
Orders
356
Growth
+12%
Chart
Transaksi
β¬οΈ Inilah target akhir BAB 3 β kamu akan membangun ini sendiri!
Buat Responsive Card Grid
π Deskripsi
Buat galeri 6 kartu produk yang tersusun rapi menggunakan Grid + Flexbox.
π§ Tools
Tailwind CSS + HTML
π Langkah
- Buat container
grid grid-cols-1 md:grid-cols-3 gap-4 - Isi 6 card berisi judul, gambar emoji, harga
- Tambahkan
hover:scale-105 transition - Gunakan Flexbox di dalam card untuk align tombol
π₯οΈ Expected Output
3 kolom di desktop, 1 kolom di mobile, kartu naik saat di-hover.
β Kriteria Penilaian
- βοΈ Responsif (mobile & desktop)
- βοΈ Styling konsisten antar kartu
- βοΈ Ada hover effect
- βοΈ Spacing rapi (gap & padding)
β±οΈ Estimasi: 30β45 menit
Sidebar + Navbar dengan Toggle Collapse
π Deskripsi
Buat layout dashboard dengan sticky sidebar yang bisa di-collapse + navbar atas.
π§ Tools
Tailwind CSS + HTML + sedikit JS
π Langkah
- Buat grid 2 kolom: sidebar + content
- Sidebar isi ikon + label menu
- Tambahkan tombol toggle yang mengubah lebar sidebar
- Sembunyikan label saat collapsed (sisakan ikon)
- Tambahkan navbar dengan
sticky top-0
π₯οΈ Expected Output
Sidebar lebarβsempit dengan transisi halus, navbar tetap menempel saat scroll.
β Kriteria Penilaian
- βοΈ Toggle collapse berfungsi
- βοΈ Transisi animasi halus
- βοΈ Navbar sticky
- βοΈ Layout tidak rusak saat collapse
β±οΈ Estimasi: 60β90 menit
Bangun Admin Dashboard UI Lengkap
π Deskripsi
Gabungkan semua komponen BAB 3 menjadi satu Admin Dashboard utuh.
π Komponen Wajib
- π Sidebar collapsible
- π§ Navbar + search + profil dropdown
- π 4 stat cards (counter)
- π Bar chart pure CSS
- π Data table transaksi
- π Card dengan hover effect
π₯οΈ Expected Output
Dashboard profesional, responsif, dengan animasi & interaktivitas dasar.
β Kriteria Penilaian (100 poin)
- βοΈ Layout lengkap & rapi (30)
- βοΈ Semua komponen ada (30)
- βοΈ Responsif (15)
- βοΈ Animasi / interaktivitas (15)
- βοΈ Kerapian kode (10)
β±οΈ Estimasi: 3β5 jam β’ π Selamat menyelesaikan BAB 3!